package com.tedu.api.socket;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.stream.Stream;

/**
 * 服务器端
 * 运行在服务器端：ServerSocket   网络连接类：申请端口号：0~9999之间数值
 * 步骤：1.服务器端创建ServerSocket【具备发送网络型数据】
 *        【目的：Server类中，任何地方随时使用ServerSocket的方法】
 *      2.创建Server类的构造器
 *      【目的：构造器--创建ServerSocket对象申请端口号
 *             主方法中创建Server对象，直接调用默认构造器】
 *      3.Server类【服务器端】添加方法：start()---实现逻辑 ：实现accept
 *        【目的：等待客户端发起一个网络的连接（socket套接字）
 *               IO流操作：传输文字】
 *     4.在主方法中：创建Server类对象--->空参数构造器【申请端口号】
 *                                   并且执行start方法
 */
public class Server {
    //1.创建服务器端的Socket
    private ServerSocket serverSocket;

    //2.创建构造器---创建端口号：6666
    public Server() {
        try {
            serverSocket = new ServerSocket(7777);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    //客户端和服务端---互相聊天【不能】----标准流IO修改成功
    //3.创建start 方法accept()等待客户端的连接 传输数据：IO
    public void start() {
        //等待科幻段连接，指定端口号：6666
        String str = null;
        InputStream is = null;
        InputStreamReader isr = null;
        BufferedReader br = null;
        try {
            System.out.println("等待客户端连接");
            Socket socket = serverSocket.accept();//卡住--客户端连接---通过
            System.out.println("一个客户端连接上了");
            //客户端连接服务器端--accept，返回socket对象---IO流

            is = socket.getInputStream();
            isr = new InputStreamReader(is, "UTF8");
            br = new BufferedReader(isr);

            while (true) {
                str = br.readLine();
                //获取一行字符串，交给str保存
                System.out.println("客户端：" + str);//打印 客户端发来的文本
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassCastException e) {//编码集异常
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
                try {
                    if (br != null)
                        br.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
        }
        }



        //      InputStream is=socket.getInputStream();//低级流--读入
        //高级流---转换流，目的：指定编码集：UTF8
  //      InputStreamReader isr=
  //              new InputStreamReader(is,"UTF8");
        //高级流--缓冲输入流
 //       BufferedReader br=new BufferedReader(isr);
        //服务器端：一直读


    //4.创建主方法--服务器端启动
    public static void main(String[] args)  {
        //执行：先创建Server类--->调用空参构造器--->申请端口号：6666
        Server server=new Server();
        //执行：然后调用Start方法--->等待客户端连接操作---进行IO流
        server.start();
    }
}
